package TestesDoModel;

import org.junit.*;

import model.ListaDeReproducao;
import model.Musica;

public class TestaListaDeReproducao {
	ListaDeReproducao lista;
	Musica musica1;
	Musica musica2;
	
	@Before
	public void criaListaDeReproducao(){
		lista = new ListaDeReproducao("Roberto Carlos");
		musica1 = new Musica("Calhambeque", "Muitas Emocoes", "Roberto Carlos", "MPB", "1975", "./Musicas/Calhambeque.mp3");
		musica2 = new Musica("Emocoes", "Muitas Emocoes", "Roberto Carlos", "MPB", "1975", "./Musicas/Emocoes.mp3");
	}
	
	@Test
	public void testaAddMusica() throws Exception{
		lista.addMusica(musica1);
		try{
			lista.addMusica(musica1);
			Assert.fail("Deveria ocorrer um erro por ter adiconado a mesma musica");
		}
		catch(Exception e){
			Assert.assertEquals("Mensagem errada", "Esta musica ja existe na playList.", e.getMessage());
		}
	}
	
	@Test
	public void testaRemoveMusica() throws Exception{
		lista.addMusica(musica1);
		lista.addMusica(musica2);
		Assert.assertEquals("Quantidade de musicas errada", 2, lista.numDeMusicas());
		lista.removeMusica(musica1);
		Assert.assertEquals("Quantidade de musicas errada", 1, lista.numDeMusicas());
	}
	
	@Test
	public void testaRemoveMusicaPeloTitulo() throws Exception{
		lista.addMusica(musica1);
		lista.addMusica(musica2);
		Assert.assertEquals("Quantidade de musicas errada", 2, lista.numDeMusicas());
		lista.removeMusicaPeloTitulo("Calhambeque");
		Assert.assertEquals("Quantidade de musicas errada", 1, lista.numDeMusicas());
	}
	
	@Test
	public void testaPesquisaMusicaPeloTitulo() throws Exception{
		lista.addMusica(musica1);
		Assert.assertEquals("O nome da musica esta incorreto", musica1, lista.pesquisaMusicaPeloTitulo("Calhambeque"));
		try{
			lista.pesquisaMusicaPeloTitulo("Uma cancao");
			Assert.fail("Deveria ocorrer um erro pois a musica nao existe");
		}
		catch(Exception e){
			Assert.assertEquals("Mensagem errada", "Essa musica nao encontra-se atualmente cadastrada", e.getMessage());
		}
	}
	
	@Test
	public void testaPesquisaPeloIndice() throws Exception{
		lista.addMusica(musica1);
		Assert.assertEquals("Indice errado", musica1, lista.pesquisaMusicaPeloIndice(0));
		/*try{
			lista.pesquisaMusicaPeloIndice(1);
			Assert.fail("Deveria ocorrer um erro pois nao existe musica nesse indice");
		}
		catch(Exception e){
			Assert.assertEquals("Mensagem errada", "[Index:1, Size:1]", e.getMessage());
		}*/
	}
	
	@Test
	public void testaMetodosModificadores() throws Exception{
		Assert.assertEquals("Nome errado", "Roberto Carlos", lista.getNome());
		lista.setNome("RC");
		Assert.assertEquals("Nome errado", "RC", lista.getNome());
		lista.addMusica(musica1);
		lista.addMusica(musica2);
		Assert.assertEquals("Numero de musicas errado", 2, lista.numDeMusicas());
	}

}
